class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        //使用上下左右四个边界来代表，所谓的逆置矩阵也就是从左到右
        //从上到下，从右到左，从下到上这样去逆置而已，使用四个变量代表四个边界，然后就这样去进行你只就能够完成
        //逆置假设这里逆置完最上层，此时就要让上边界+1，因为此时第一层已经遍历完成了
        int l = 0;//左边界
        int r = matrix[0].size()-1;//右边界
        int t = 0;//上边界
        int b = matrix.size()-1;//下边界
        //然后就是按照从左到右，从上到下，从右到左，从下到上的方法去进行遍历矩阵了
        vector<int> ret;
        while(true)
        {
            //从左到右
            for(int i = l;i<=r;i++)
            {
                ret.push_back(matrix[t][i]);
            }
            //到这里第一行就遍历完成了，需要让上边界+1
            if(++t>b)
            {
                break;//如果上边界大于了下边界，说明矩阵逆置完成了
            }
            //从上到下
            for(int i = t;i<=b;i++)
            {
                ret.push_back(matrix[i][r]);
            }
            //到这里右边的一列已经遍历完成了要让右边界--
            if(--r<l)
            {
                break;
            }
            //从右到左
            for(int i = r;i>=l;i--)
            {
                ret.push_back(matrix[b][i]);
            }
            //到这里最下面一行就遍历完成了
            if(--b<t)
            {
                break;
            }
            //从下到上
            for(int i = b;i>=t;i--)
            {
                ret.push_back(matrix[i][l]);
            }
            //到这里最左边一行就白能力完成了
            if(++l>r)
            {
                break;
            }
        }
        return  ret;
    }
};